// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt
// Project developers.  See the top-level LICENSE file for dates and other
// details.  No copyright assignment is required to contribute to VisIt.

#include "UpdatePlotAttsRPC.h"

#include <Xfer.h>

#include <string>
using std::string;

// ----------------------------------------------------------------------------
//                         class PrepareUpdatePlotAttsRPC
// ----------------------------------------------------------------------------

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::PrepareUpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
PrepareUpdatePlotAttsRPC::PrepareUpdatePlotAttsRPC() 
    : BlockingRPC("s")
{
    id = "unknown";
    updatePlotAttsRPC = NULL;
}

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::~PrepareUpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
PrepareUpdatePlotAttsRPC::~PrepareUpdatePlotAttsRPC() 
{
}

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::SetUpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
void
PrepareUpdatePlotAttsRPC::SetUpdatePlotAttsRPC(UpdatePlotAttsRPC *rpc)
{
    updatePlotAttsRPC = rpc;
}

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::operator
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
void
PrepareUpdatePlotAttsRPC::operator()(const std::string &n)
{
    id = n;
    Select(0, (void*)&id);
    Execute();
}

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::SelectAll
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
void
PrepareUpdatePlotAttsRPC::SelectAll()
{
    Select(0, (void*)&id);
}

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::GetID
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
string
PrepareUpdatePlotAttsRPC::GetID()
{
    return id;
}

// ****************************************************************************
//  Method:  PrepareUpdatePlotAttsRPC::GetUpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
UpdatePlotAttsRPC*
PrepareUpdatePlotAttsRPC::GetUpdatePlotAttsRPC()
{
    return updatePlotAttsRPC;
}


// ----------------------------------------------------------------------------
//                          class UpdatePlotAttsRPC
// ----------------------------------------------------------------------------


// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::UpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
UpdatePlotAttsRPC::UpdatePlotAttsRPC() 
    : BlockingRPC("ia")
{
    index = -1;
    atts = NULL;
    prepareUpdatePlotAttsRPC.SetUpdatePlotAttsRPC(this);
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::~UpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************

UpdatePlotAttsRPC::~UpdatePlotAttsRPC()
{
    if (atts)
        delete atts;
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::SetAtts
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
//  Modifications:
//    Burlen Loring, Tue Apr 29 09:34:17 PDT 2014
//    fix leaking AttributeSubject object
//
// ****************************************************************************
void
UpdatePlotAttsRPC::SetAtts(AttributeSubject *a)
{
    if (atts == a)
        return;

    if (atts)
        delete atts;

    atts = a;
    Select(1, (void*)atts);
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::SetXfer
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
void
UpdatePlotAttsRPC::SetXfer(Xfer *x)
{
    VisItRPC::SetXfer(x);
    xfer->Add(&prepareUpdatePlotAttsRPC);
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::SelectAll
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
void
UpdatePlotAttsRPC::SelectAll()
{
    Select(0, (void*)&index);
    // atts will be done when they are set.
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::GetID
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
std::string
UpdatePlotAttsRPC::GetID()
{
    return prepareUpdatePlotAttsRPC.GetID();
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::GetAtts
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
const AttributeSubject*
UpdatePlotAttsRPC::GetAtts()
{
    return atts;
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::GetPrepareUpdatePlotAttsRPC
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
PrepareUpdatePlotAttsRPC&
UpdatePlotAttsRPC::GetPrepareUpdatePlotAttsRPC()
{
    return prepareUpdatePlotAttsRPC;
}

// ****************************************************************************
//  Method:  UpdatePlotAttsRPC::operator()
//
//  Purpose:
//    
//
//  Programmer:  Hank Childs
//  Creation:    November 30, 2001
//
// ****************************************************************************
void
UpdatePlotAttsRPC::operator()(const string &n, int ind, 
                              const AttributeSubject *a)
{
    prepareUpdatePlotAttsRPC(n);
    Select(0, (void *)&ind);
    if (a)
       Select(1, (void *)a);

    Execute();
}


